package com.ruoyi.app.service;

import com.ruoyi.app.domain.AppAssetTransfer;
import com.ruoyi.app.domain.bo.AppToUserIdBo;
import com.ruoyi.app.domain.bo.AppUserFreeBo;
import com.ruoyi.app.domain.vo.AppAssetTransferVo;
import com.ruoyi.app.domain.bo.AppAssetTransferBo;
import com.ruoyi.app.domain.vo.AppUserVo;
import com.ruoyi.common.core.page.TableDataInfo;
import com.ruoyi.common.core.domain.PageQuery;

import java.math.BigDecimal;
import java.util.Collection;
import java.util.List;

/**
 * 转增订单Service接口
 *
 * @author app
 * @date 2025-06-24
 */
public interface IAppAssetTransferService {

    /**
     * 查询转增订单
     */
    AppAssetTransferVo queryById(Long transferId);

    /**
     * 查询转增订单列表
     */
    TableDataInfo<AppAssetTransferVo> queryPageList(AppAssetTransferBo bo, PageQuery pageQuery);

    /**
     * 查询转增订单列表
     */
    List<AppAssetTransferVo> queryList(AppAssetTransferBo bo);

    /**
     * 新增转增订单
     */
    Boolean insertByBo(AppAssetTransferBo bo);

    /**
     * 修改转增订单
     */
    Boolean updateByBo(AppAssetTransferBo bo);

    /**
     * 修改转增订单
     */
    Boolean updateByVo(AppAssetTransferVo vo);


    /**
     * 修改转增订单
     * @param bo 订单信息
     * @return
     */
    Boolean update(AppAssetTransferBo bo);


    /**
     * 确定转赠订单
     * @param vo 订单信息
     * @return
     */
    Boolean confirmTransfer(AppAssetTransferVo vo);


    /**
     * 确定转赠订单
     * @param vo 订单信息
     * @return
     */
    Boolean confirmTransfer2(AppAssetTransferVo vo);


    /**
     * 校验并批量删除转增订单信息
     */
    Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid);

    /**
     * 创建转赠订单
     * @param id 用户ID
     * @param userVo 用户信息
     * @param balance 转赠数量
     * @param rate 手续费
     * @return
     */
    AppAssetTransferBo createTransfer(Long id, AppUserVo userVo, BigDecimal balance,BigDecimal rate);

    /**
     * 创建转赠积分订单
     * @param id 用户ID
     * @param userVo 用户信息
     * @param balance 转赠数量
     * @param rate 手续费
     * @return
     */
    AppAssetTransferBo createTransferIntegral(Long id, AppUserVo userVo, BigDecimal balance,BigDecimal rate);

    /**
     * 订单自动完成
     * @param e 订单信息
     */
    void downOrder(AppAssetTransferVo e);

    /**
     * 取消订单
     * @param transferVo 订单信息
     * @return
     */
    Boolean cancelTransfer(AppAssetTransferVo transferVo);


    /**
     * 订单售后处理
     * @param transferVo 订单信息
     * @param bo 售后信息
     * @return
     */
    Boolean customerOrder(AppAssetTransferVo transferVo, AppAssetTransferBo bo);

    Boolean dongjie(AppToUserIdBo bo);

    /**
     * 冻结
     * @param appUserFreeBo
     * @return
     */
    Boolean freeze(AppUserFreeBo appUserFreeBo);
}
